export function formatNum(num){  
    if(!/^(\+|-)?(\d+)(\.\d+)?$/.test(num)){alert("wrong!");   return   num;}  
    var   a   =   RegExp.$1,   b   =   RegExp.$2,   c   =   RegExp.$3;  
    var   re   =   new   RegExp().compile("(\\d)(\\d{3})(,|$)");  
    while(re.test(b))   b   =   b.replace(re,   "$1,$2$3");  
    return   a   +""+   b   +""+   c;  
}

var timer
export function debounce(fn, delay) {  
  if(timer)
  clearTimeout(timer)
  timer = setTimeout(()=>{
    fn()
  }, delay)
}

const utf8_encode = function(input) {  
  input = input.replace(/\r\n/g,"\n");  
  let utftext = "";  
  for (let n = 0; n < input.length; n++) {  
      let c = input.charCodeAt(n);  
      if (c < 128) {  
          utftext += String.fromCharCode(c);  
      } else if((c > 127) && (c < 2048)) {  
          utftext += String.fromCharCode((c >> 6) | 192);  
          utftext += String.fromCharCode((c & 63) | 128);  
      } else {  
          utftext += String.fromCharCode((c >> 12) | 224);  
          utftext += String.fromCharCode(((c >> 6) & 63) | 128);  
          utftext += String.fromCharCode((c & 63) | 128);  
      }  
  }  
  return utftext;  
}

export function encode(input) { 
  let _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";   
  let output = "";  
  let chr1, chr2, chr3, enc1, enc2, enc3, enc4;  
  let i = 0;  
  input = utf8_encode(input);  
  while (i < input.length) {  
      chr1 = input.charCodeAt(i++);  
      chr2 = input.charCodeAt(i++);  
      chr3 = input.charCodeAt(i++);  
      enc1 = chr1 >> 2;  
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);  
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);  
      enc4 = chr3 & 63;  
      if (isNaN(chr2)) {  
          enc3 = enc4 = 64;  
      } else if (isNaN(chr3)) {  
          enc4 = 64;  
      }  
      output = output +  
      _keyStr.charAt(enc1) + _keyStr.charAt(enc2) +  
      _keyStr.charAt(enc3) + _keyStr.charAt(enc4);  
  }  
  return output;  
}